package com.hqyj.springboot.controller;

import com.hqyj.springboot.json.R;
import com.hqyj.springboot.service.TaskService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.Future;

@RequestMapping("task")
@RestController
public class TaskController {

    @Resource
    private TaskService taskService;


    //模拟做三个同步任务，如果是同步任务，那么完成这三个同步任务的时间，应该三个任务的总和。

    //5000*3 = 15秒；验证一下。

    @GetMapping("/sync")
    public R doSynchronizedTask() {
        try{
            Long startTime = System.currentTimeMillis(); //获得当前的时间
            Future<Integer> result1 = taskService.doSynchronizedTask();
            Future<Integer> result2 = taskService.doSynchronizedTask();
            Future<Integer> result3 = taskService.doSynchronizedTask();
            //返回的计算结果求和。//也就是说下面这三个get方法都是阻塞。
            //执行完这三个同步任务，时间总和大概应该是15秒左右。
            Integer result = result1.get()+result2.get()+result3.get();
            Long endTime = System.currentTimeMillis();
            System.out.println("总耗时："+((endTime - startTime) / 1000)+"秒");
            return R.success("同步任务执行成功！",result);

        }catch(Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }


    @GetMapping("/async")
    public R doAsynchronizedTask() {
        try{
            Long startTime = System.currentTimeMillis(); //获得当前的时间
            Future<Integer> result1 = taskService.doAsynchronizedTask();
            Future<Integer> result2 = taskService.doAsynchronizedTask();
            Future<Integer> result3 = taskService.doAsynchronizedTask();
            //返回的计算结果求和。//也就是说下面这三个get方法都是阻塞。
            //执行完这三个同步任务，时间总和大概应该是15秒左右。
            Integer result = result1.get()+result2.get()+result3.get();
            Long endTime = System.currentTimeMillis();
            System.out.println("总耗时："+((endTime - startTime) / 1000)+"秒");
            return R.success("异步任务执行成功！",result);

        }catch(Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }
}
